package 力扣;

/**
 * 给定一个二叉树，判断它是否是高度平衡的二叉树。
 *
 * 本题中，一棵高度平衡二叉树定义为：
 *
 * 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
 *
 输入：root = [3,9,20,null,null,15,7]
 输出：true

 输入：root = [1,2,2,3,3,null,null,4,4]
 输出：false

 输入：root = []
 输出：true
 */

public class _110平衡二叉树 {
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode() {}
        TreeNode(int val) { this.val = val; }
        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }

    public boolean isBalanced(TreeNode root) {
        if( root ==null ) return true;
         // 始终保持平衡
        else return Math.abs(height(root.left) - height(root.right) ) <= 1  && isBalanced( root.left ) && isBalanced(root.right);
    }
    public int height(TreeNode node){
        if ( node == null) return 0;
        else return Math.max(height(node.left),height(node.right))+1;
    }



}
